package com.crcode.crm.dao.data;

import com.crcode.crm.bean.data.EnterpriseBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Map;

/**
 * 企业数据访问接口
 * @author xiangfei
 */
public interface EnterpriseDao extends JpaRepository<EnterpriseBean, Integer>, JpaSpecificationExecutor<EnterpriseBean> {

    /**
     * 根据UUID查询
     * @param uuid uuid
     * @return EnterpriseBean
     */
    EnterpriseBean findByUuid(String uuid);

    /**
     * 根据名称查询
     * @param name
     * @return
     */
    List<EnterpriseBean> findByEntName(String name);
    
    /**
     * 根据名称查询
     * @param name
     * @return
     */
    public List<EnterpriseBean> findByEntNameAndUuidNot(String name,String uuid);

    /**
     * 根据序号单一、批量删除返回操作结果数
     * @param ids id数组
     * @return long
     */
    long deleteByIdIn(List<Integer> ids);

    Page<EnterpriseBean> findByEntNameContaining(String name, Pageable pageable);
    
    /**
     * 根据序号集查询
     * @author lxw
     * @date 2019年4月9日
     * @param uuids uuids
     * @return
     */
    public List<EnterpriseBean> findByUuidIn(List<String> uuids);

    /**
     * 根据id查找多个对象
     * @param ids ids
     * @return
     */
    List<EnterpriseBean> findByIdIn(List<Integer> ids);

    /**
     * 根据用户/创建时间统计企业数量,按天统计
     * @return List<Map<String, Object>>
     */
    @Query(value = "select * " +
            "from " +
            "(SELECT DATE_FORMAT(create_time,\"%Y-%m-%d\") AS name, count(id) AS value " +
            "FROM `data_enterprise` " +
            "WHERE (?1 IS NOT NULL AND create_user_uuid=?1 ) OR (?1 IS null) " +
            "GROUP BY DATE_FORMAT(create_time,\"%Y-%m-%d\") " +
            ") as result " +
            "order by name asc", nativeQuery = true)
    List<Map<String, Object>> aggsEntByUserCreateTime(String uuid);
    
    /**
	 * 根据资源uuid集改变状态
	 * @author lxw
	 * @date 2019年4月19日
	 * @param proStats
	 * @param uuid
	 * @return
	 */
	@Modifying
    @Query("update EnterpriseBean p set p.entStats = ?1  where p.uuid in ?2")
	public int updateEntStatsByUuids(Integer entStats,List<String> uuid);
	
	/**
	 * 根据序号集和改变责任人
	 * @author lxw
	 * @date 2019年4月26日
	 * @param userUuid
	 * @param userName
	 * @param uuid
	 * @return
	 */
	@Modifying
	@Query("update EnterpriseBean p set p.liableUserUuid = ?1, p.liableUserName = ?2 where p.uuid in ?3")
	public int updateProLiableUserByUuids(String userUuid,String userName,List<String> uuid);
}
